﻿using DevExpress.XtraEditors;
using MesProjectWinform.Equipment.Output;
using MesProjectWinform.Public;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MesProjectWinform.Equipment.Form.DeviceType
{
    public partial class DeviceTypeEditForm : DevExpress.XtraEditors.XtraForm
    {
        // 添加这一行来声明变量
        private DeviceTypeOuput deviceTypeOutput;
        public DeviceTypeEditForm()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 设置要编辑的设备类型，并从API获取详细数据
        /// </summary>
        /// <param name="id">设备类型ID</param>
        public async void SetDeviceType(long id)
        {
            try
            {
                // 调用API获取设备类型详细信息
                using (var client = new HttpClient())
                {
                    var response = await client.GetStringAsync($"http://47.110.243.157:5229/api/DeviceType/GetDeviceTypeValue?id={id}");
                    var result = JsonConvert.DeserializeObject<ApiResult<DeviceTypeOuput>>(response);

                    if (result.Code == ApiEnums.Success && result.Data != null)
                    {
                        // 保存当前编辑的设备类型
                        deviceTypeOutput = result.Data;

                        // 将数据显示到表单控件中
                        DeviceTypeName.Text = deviceTypeOutput.DeviceTypeName;
                        DeviceTypeDescription.Text = deviceTypeOutput.DeviceTypeDescription;
                    }
                    else
                    {
                        MessageBox.Show("获取设备类型数据失败！");
                        this.DialogResult = DialogResult.Cancel;
                        this.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"获取设备类型数据出错：{ex.Message}");
                this.DialogResult = DialogResult.Cancel;
                this.Close();
            }
        }
        /// <summary>
        /// 点击保存按钮时触发的事件处理程序。
        /// 该方法会校验输入内容，更新本地设备类型对象，并调用API进行保存。
        /// </summary>
        /// <param name="sender">事件源对象</param>
        /// <param name="e">事件参数</param>
        private async void UpdateDeviceType1_Click(object sender, EventArgs e)
        {
            try
            {
                // 验证设备名称是否为空
                if (string.IsNullOrWhiteSpace(DeviceTypeName.Text))
                {
                    MessageBox.Show("设备名称不能为空！");
                    return;
                }

                // 检查当前是否有要修改的设备类型数据
                if (deviceTypeOutput == null)
                {
                    MessageBox.Show("没有要修改的设备类型数据！");
                    return;
                }

                // 更新当前设备类型数据对象的属性
                deviceTypeOutput.DeviceTypeName = DeviceTypeName.Text;
                deviceTypeOutput.DeviceTypeDescription = DeviceTypeDescription.Text;
                deviceTypeOutput.UpdatedTime = DateTime.Now; // 更新时间为当前时间

                // 使用HttpClient调用API，提交更新后的设备类型数据
                using (var client = new HttpClient())
                {
                    // 将设备类型对象序列化为JSON字符串
                    var json = JsonConvert.SerializeObject(deviceTypeOutput);
                    // 构造HTTP请求内容，指定内容类型为application/json
                    var content = new StringContent(json, Encoding.UTF8, "application/json");
                    // 发送PUT请求到API接口
                    var response = await client.PutAsync("http://47.110.243.157:5229/api/DeviceType/UpdateDeviceType", content);

                    // 判断HTTP响应是否成功
                    if (response.IsSuccessStatusCode)
                    {
                        // 读取响应内容
                        var responseContent = await response.Content.ReadAsStringAsync();
                        // 反序列化API返回结果
                        var result = JsonConvert.DeserializeObject<ApiResult<bool>>(responseContent);

                        // 判断API返回的业务状态码和数据
                        if (result.Code == ApiEnums.Success && result.Data)
                        {
                            MessageBox.Show("修改成功！");
                            this.DialogResult = DialogResult.OK;
                            this.Close();
                        }
                        else
                        {
                            MessageBox.Show($"修改失败：{result.Message}");
                        }
                    }
                    else
                    {
                        MessageBox.Show("修改失败，服务器返回错误！");
                    }
                }
            }
            catch (Exception ex)
            {
                // 捕获异常并提示错误信息
                MessageBox.Show($"修改出错：{ex.Message}");
            }
        }

    }
}